#include <stdio.h>
#include <cuda_runtime.h>

// 定义一个全局变量
__device__ int deviceArray[10];

__global__ void printArray() {
    for (int i = 0; i < 10; i++) {
        printf("deviceArray[%d] = %d\n", i, deviceArray[i]);
    }
}

int main() {
    int hostArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // 将主机数组的数据复制到设备全局变量
    cudaError_t err = cudaMemcpyToSymbol(deviceArray, hostArray, sizeof(hostArray));
    if (err != cudaSuccess) {
        fprintf(stderr, "cudaMemcpyToSymbol failed: %s\n", cudaGetErrorString(err));
        return 1;
    }

    // 调用核函数打印设备数组
    printArray<<<1, 1>>>();

    // 同步设备上全部stream
    cudaDeviceSynchronize();

    // 检查核函数调用是否有错误
    err = cudaGetLastError();
    if (err != cudaSuccess) {
        fprintf(stderr, "Kernel launch failed: %s\n", cudaGetErrorString(err));
        return 1;
    }

    // 释放 CUDA 资源
    cudaDeviceReset();

    return 0;
}


// deviceArray[0] = 1
// deviceArray[1] = 2
// deviceArray[2] = 3
// deviceArray[3] = 4
// deviceArray[4] = 5
// deviceArray[5] = 6
// deviceArray[6] = 7
// deviceArray[7] = 8
// deviceArray[8] = 9
// deviceArray[9] = 10